package day18;
/*本类用于测试匿名内部类，没有名字，通常结合着匿名对象一起使用*/
public class TestInner5 {
    public static void main(String[] args) {
        /*接口可以创建对象吗？不可以！！！*/
        //new Inner1();//接口不能创建对象
        //3.new Inner1()匿名对象
        //以前我们创建接口，接口不能实例化
        //所以我们创建接口实现类 +重写接口中的抽象方法 + 创建实现类对象 + 调用方法
        /*就相当于创建了一个接口的实现类 + 重写接口中的所有抽象方法*/
        new Inner1() {//3.1接口的实现类
            @Override
            public void save() {//3.2重写接口中的抽象方法1
                System.out.println("我是Inner1接口的save()");
            }
            @Override
            public void get() {//3.2重写接口中的抽象方法2
                System.out.println("我是Inner1接口的get()");
            }
        }.get();//3.3触发指定的重写后的方法，只能调用一个，并且只能调用一次
        /*注意！！！匿名对象只使用一次，而且一次只能干一件事！！！*/

        //5.new Inner2()匿名对象，相当于创建了抽象类的普通子类
        /*匿名内部类实现的方法都是抽象方法，注意是所有抽象方法*/
        new Inner2() {
            @Override
            public void drink() {
                System.out.println("我是Inner2抽象类的drink()");
            }
        }.drink();

        //7.普通类的匿名对象，不会强制要求产生匿名内部类的重写方法
        //如果使用对象，只需要干一件事--可以直接创建匿名对象，简单又方便
        new Inner3().power();
        //如果想使用同一个对象来干很多件事情，必须要给对象起名字
        Inner3 i3 = new Inner3();
        i3.power();
        i3.study();
        i3.study();
        i3.study();
    }
}
//1.创建接口
interface Inner1{
    //2.定义接口中的抽象方法
    void save();
    void get();
}

//4.创建抽象类
abstract class Inner2{
    public void play(){
        System.out.println("我是Inner2抽象类中的普通方法play()");
    }
    abstract public void drink();
}

//6.创建普通类Inner3
class Inner3{
    public void power(){
        System.out.println("我们会越来越强的，光头强");
    }
    public void study(){
        System.out.println("什么都阻挡不了我学习的脚步");
    }
}



